#!/usr/bin/perl -w
use CGI qw(:cgi);   
CGI::private_tempfiles(0);
print "Content-type:text/html\n\n";
my $directorio_subida = "/RUTA_ABSOLUTA/subidas/";
my $directorio_temp ="/temp/"; #Ruta absoluta
################################################################################ 
## Definir las variables
################################################################################
## Obtener ID Unico pasado desde PHP
	my $sid = (split(/[&=]/,$ENV{QUERY_STRING}))[1];
	$sid =~ s/[^a-zA-Z0-9]//g;   

## Definir Las rutas a los directorios (Rutas absolutas)
	#my $directorio_subida = $ENV{'DOCUMENT_ROOT'}."/uploads/";  
	#my $directorio_temp = $ENV{'DOCUMENT_ROOT'}."/temp/";
	my $directorio_sesion = $directorio_temp.$sid;

## Definir Variable para el tamanio de subida Upload Size
	my $fichero_tam_subido = $directorio_sesion.'/tam_subido';
	my $tam_subido=0;
	#50MB
	my $max_tamano = 52428800;
	$CGI::POST_MAX = $$max_tamano;
	
## Salida de depuracion
	my $debug = 1;

################################################################################ 
## Mascara
################################################################################
umask(0);
$|++;    
################################################################################ 
## Comenzar a procesar la subida
################################################################################
print "Content-type: text/html\n\n";
if ($debug) {
	print "zenAJAX Perl :: Script de subida<br>\n";
}

################################################################################ 
## Crear Directorio de subida si no existe
################################################################################
print "Comprobando el directorio para las subidas -> ";
if(-d $directorio_subida){ 
	print "<b style='color:green;'>Encontrado</b><br>"; 
	chmod 0777, $directorio_subida;
} else {
	print "Creando el directorio de subidas : ";
	if (mkdir($directorio_subida, 0766)) { print "<b style='color:green;'>Hecho</b><br>"; } else { print "<b style='color:red;'>Error</b><br>";}
}

################################################################################ 
## Crear directorio temporal
################################################################################
print "Comprobando el directorio temporal -> ";
if(-d $directorio_temp){ print "<b style='color:green;'>Encontrado</b><br>"; chmod 0777, $directorio_temp;
} else {
	print "Creando el directorio temporal: "; 
	if (mkdir($directorio_temp, 0777)) { print "<b style='color:green;'>Hecho</b><br>"; } else { print "<font color='red'>Error</font><br>";}
}
################################################################################ 
## Crear el directorio de sesion temporal
################################################################################
print "Comprobando el directorio de sesi&oacute;n temporal -> ";
if(-d $directorio_sesion){ print "<b style='color:green;'>Encontrado</b><br>"; chmod 0777, $directorio_sesion;
} else {
	print "Creando directorio: "; 
	if (mkdir($directorio_sesion, 0777)) { print "<b style='color:green;'>Hecho</b><br>"; } else { print "<font color='red'>Error</font><br>";}
}
################################################################################ 
## Comprobar el tamanio subido
################################################################################
if ($ENV{'CONTENT_LENGTH'}> $$max_tamano) {
	print "<scrript type='text/javascript'>parent.cancelUpload('Tamanio maximo excedido');</script>";
} else {
################################################################################ 
## Crear fichero con el tamanio subido
################################################################################
	print "Creando fichero con temporal -> ";
	open FLENGTH, ">$fichero_tam_subido";
		$tam_subido = $ENV{'CONTENT_LENGTH'};
		print FLENGTH $tam_subido;
	close FLENGTH;
	chmod 0777, $fichero_tam_subido;
	if(-e  $fichero_tam_subido){ print "<b style='color:green;'>Hecho</b><br>"; } else { print "<b style='color:red;'>Error</b><br>";}
	
################################################################################ 
## Relocalizar directorio temporal de ficheros
################################################################################
	print "Estableciendo directorio privado temporal -> ";
	if ($TempFile::TMPDIRECTORY) { 
		$TempFile::TMPDIRECTORY = $directorio_sesion;
		print "<b style='color:green;'>Hecho</b><br>";
	}
	elsif (
		$CGITempFile::TMPDIRECTORY){  $CGITempFile::TMPDIRECTORY = $directorio_sesion; 
		print "<b style='color:green;'>Hecho</b><br>";
	} else {
		print "<b style='color:red;'>Error</b><br>";
	}
	sleep(2);
################################################################################ 
## Procesar fichero subido
################################################################################
	if(-d $directorio_sesion){ 
		my $cgi = new CGI;
		my $_fichero = $cgi->param("filename");
		$_fichero =~ s/.*[\/\\](.*)/$1/;
		my $ruta_fichero_subido = $directorio_subida.$_fichero;
		my $manejador_fichero_subido = $cgi->upload("filename");
		my $nombre_temp = $cgi->tmpFileName($manejador_fichero_subido);
		close($manejador_fichero_subido);
		print "Moviendo fichero al directorio de subida -> ";
		if ( rename($nombre_temp, $ruta_fichero_subido) ) { 
			print "<b style='color:green;'>Hecho</b><br>"; 
			chmod 0777, $ruta_fichero_subido;
		} else { 
			print "<font color='red'>Error</font><br>";
		}
		print "Eliminando el fichero auxiliar temporal -> ";
		if (unlink($fichero_tam_subido)) { print "<b style='color:green;'>Hecho</b><br>"; } else { print "<font color='red'>Error</font><br>";}
	}
}
################################################################################ 
## Eliminar fichero temporal de sesion
################################################################################
print "Eliminando el directorio temporal de la sesi&oacute;n -> ";
if (rmdir($directorio_sesion)) { print "<b style='color:green;'>Hecho</b><br>"; } else { print "<font color='red'>Error</font><br>";}
